/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hormigas_packettracker.beans;

import java.util.ArrayList;
/**
 *
 * @author Shadow
 */
public class Vehiculo {
    private Punto _posicionInicial;
    private Punto _posicionActual;
    private Path _ruta;
    private double _consumoPorKm;
    private int _capacidadTotal;
    private int _capacidadActual;
    private int _velocidad;
    private double _gasolinaTotal;
    private double _gasolinaActual;
    private int _tipoVehiculo;
    public boolean disponible = true;
    private int _residuo = 0;
    
    public Vehiculo(Punto puntoIni){
        _posicionInicial = puntoIni;
        _posicionActual = puntoIni;
        _ruta = new Path(puntoIni);
    }

    public Punto getPosicionInicial() {
        return _posicionInicial;
    }

    public void setPosicionInicial(Punto _posicionInicial) {
        this._posicionInicial = _posicionInicial;
    }

    public Punto getPosicionActual() {
        return _posicionActual;
    }

    public void setPosicionActual(Punto _posicionActual) {
        this._posicionActual = _posicionActual;
    }
    public Path getRuta() {
        return _ruta;
    }
    public void setRuta(Path _ruta) {
        this._ruta = _ruta;
    }
    public void setRuta (ArrayList<Punto> ruta){
        this._posicionActual = ruta.get(0);
        this._ruta = new Path(ruta);
    }
    public double getConsumoPorKm() {
        return _consumoPorKm;
    }
    public void setConsumoPorKm(double _consumoPorKm) {
        this._consumoPorKm = _consumoPorKm;
    }

    public int getCapacidadTotal() {
        return _capacidadTotal;
    }

    public void setCapacidadTotal(int _capacidadTotal) {
        this._capacidadTotal = _capacidadTotal;
    }

    public boolean isDisponible() {
        return disponible;
    }

    public void setDisponible(boolean disponible) {
        this.disponible = disponible;
    }

    public int getResiduo() {
        return _residuo;
    }

    public void setResiduo(int _residuo) {
        this._residuo = _residuo;
    }
    
    public int getCapacidadActual() {
        return _capacidadActual;
    }
    public void setCapacidadActual(int _capacidadActual) {
        this._capacidadActual = _capacidadActual;
    }
    public int getVelocidad() {
        return _velocidad;
    }
    public void setVelocidad(int _velocidad) {
        this._velocidad = _velocidad;
    }

    public double getGasolinaTotal() {
        return _gasolinaTotal;
    }

    public void setGasolinaTotal(double _gasolinaTotal) {
        this._gasolinaTotal = _gasolinaTotal;
    }
    double getGasolinaActual() {
        return _gasolinaActual;
    }
    public void setGasolinaActual(double _gasolinaActual) {
        this._gasolinaActual = _gasolinaActual;
    }

    public int getTipoVehiculo() {
        return _tipoVehiculo;
    }

    public void setTipoVehiculo(int _tipoVehiculo) {
        this._tipoVehiculo = _tipoVehiculo;
    }

    public void actualizaOrdenes(Punto p,ArrayList<Pedido> pedidos){
        if(p == Mapa.getAlmacen()){
            _gasolinaActual = _gasolinaTotal;
            _capacidadActual = _capacidadTotal;
            return;
        }
        for(int i =0; i< pedidos.size();i++){
            if(pedidos.get(i).getDestino()==p){
                if(pedidos.get(i).getDemanda() > this.getCapacidadActual()){
                    pedidos.get(i).setDemanda(pedidos.get(i).getDemanda()-this.getCapacidadActual());
                    this.setCapacidadActual(0);
                }
                else{
                    this.setCapacidadActual(this.getCapacidadActual()-pedidos.get(i).getDemanda());
                    pedidos.get(i).setDemanda(0);
                    pedidos.remove(i);
                }
            }
        }
    }

    public void avanzar(int tiempo, ArrayList<Pedido> pedidos){
        float dist = _velocidad * tiempo/60;
        int numNodos = Math.round(dist);
        float residuo = dist - numNodos;
        _residuo += residuo;
        int nodoExtra= Math.round(_residuo);
        _residuo-=nodoExtra;
        numNodos+=nodoExtra;
        int posActual = _ruta.indexOf(_posicionActual);
        
        for(int i = posActual+1; i<posActual+numNodos && i<_ruta.size();i++){
            _posicionActual = _ruta.get(i);
            actualizaOrdenes(_posicionActual,pedidos);
            this._gasolinaActual -= numNodos;
        }
        
    }
}
